/**
 * 
 */
package rest.resources;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;

import org.orm.PersistentException;

import com.google.gson.Gson;

/**
 * @author Franko
 *
 */

@Path("/ServiceAdministrador")
public class ServiceAdministrador {
	
	
	
	/**
	 * Ingresa un nuevo registro de administrador a la base de datos
	 * 
	 * @param usuario
	 * @param clave
	 * @return String
	 * @throws PersistentException 
	 */
	@POST
	@Path("/registrarAdministrador")
	public static String registrarAdministrador(@FormParam("usuario") String usuario,@FormParam ("clave") String clave) throws PersistentException {



		if(usuario.length() > 50 || clave.length() > 50){
			return "El largo de Usuario/Clave no puede superar los 50 caracteres";
		} else if(usuario.length() == 0 || clave.length() == 0){
			return "Usuario/Clave no puede ser null";
		} else {

			orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
			orm.Administracion ormAdministrador = lDAOFactory.getAdministracionDAO().loadAdministracionByQuery("usuario='" + usuario + "'", null);

			if (ormAdministrador == null) {

				orm.dao.AdministracionDAO lormAdministradorDAO = lDAOFactory.getAdministracionDAO();
				orm.Administracion lormAdministrador = lormAdministradorDAO.createAdministracion();

				lormAdministrador.setUsuario(usuario);
				lormAdministrador.setClave(clave);

				lormAdministradorDAO.save(lormAdministrador);

				return "Usuario " + lormAdministrador.getUsuario() + " registrado de forma exitosa";

			} else {
				return "Error: El usuario ya existe";
			} 

		}

	}

	@POST
	@Consumes("application/json")
	@Path("/registrarAdministradorJSON")
	public static String registrarAdministradorJSON(String json) throws PersistentException {

		domain.AdministracionVO oAdministradorVO =  new Gson().fromJson(json, domain.AdministracionVO.class);

		return ServiceAdministrador.registrarAdministrador(oAdministradorVO.getUsuario(), oAdministradorVO.getClave());

	}

	/**
	 * Retorna un listado de objeto de la clase AdministradorVO.
	 *
	 * @param oAdministradorVO
	 * @return String salida
	 */
	@GET
	@Path("/mostrarAdministradores")
	public static String mostrarAdministradores() {

		List<domain.AdministracionVO> administradoresIngresados = new ArrayList<domain.AdministracionVO>();

		try{

			orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
			orm.Administracion[] administradores = lDAOFactory.getAdministracionDAO().listAdministracionByQuery(null, null);

			for (int i = 0; i < administradores.length; i++) {
				administradoresIngresados.add(new domain.AdministracionVO(administradores[i].getUsuario(),
						administradores[i].getClave()));
			}

			return new Gson().toJson(administradoresIngresados);

		} catch (PersistentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return "Error de persistencia";
		}
	}
	
	

}
